package core

import (
	"fmt"
	"giv-vue-blog/global"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"time"
)

// InitGorm 初始化数据库
func InitGorm() *gorm.DB {
	if global.Config.Mysql.Host == "" {
		global.Log.Warnln("未配置mysql.取消连接")
		return nil
	}
	dsn := global.Config.Mysql.Dsn()
	var mysqlLogger logger.Interface
	if global.Config.System.Env == "dev" {
		//	开发环境显示所有sql
		mysqlLogger = logger.Default.LogMode(logger.Info)
	} else {
		//如果不是开发环境,则只打印错误sql
		mysqlLogger = logger.Default.LogMode(logger.Error)
	}
	//此处配置了sql的日志等级
	global.MysqlLog = logger.Default.LogMode(logger.Info)
	//logger配置
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		Logger: mysqlLogger,
	})
	if err != nil {
		global.Log.Fatalf(fmt.Sprintf("[%s] mysql连接失败", dsn)) //会直接退出
		panic(err)
	}
	sqlDB, _ := db.DB()
	sqlDB.SetMaxIdleConns(10)               //最大空闲连接数
	sqlDB.SetMaxOpenConns(100)              //最多可容纳
	sqlDB.SetConnMaxLifetime(time.Hour * 4) //连接最大复用时间
	return db
}
